{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "input_dim:  4 , output_dim:  2 , hidden_dim:  16\n",
      "threshold:  195.0\n"
     ]
    }
   ],
   "source": [
    "import gym\n",
    "import numpy as np\n",
    "import torch\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "import time\n",
    "\n",
    "from collections import deque\n",
    "from agent import Agent, FloatTensor\n",
    "from replay_buffer import ReplayMemory, Transition\n",
    "from  torch.autograd import Variable\n",
    "\n",
    "# set up matplotlib\n",
    "is_ipython = 'inline' in matplotlib.get_backend()\n",
    "if is_ipython:\n",
    "    from IPython import display\n",
    "\n",
    "plt.ion()\n",
    "\n",
    "use_cuda = torch.cuda.is_available()\n",
    "FloatTensor = torch.cuda.FloatTensor if use_cuda else torch.FloatTensor\n",
    "device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n",
    "\n",
    "BATCH_SIZE = 64  \n",
    "TAU = 0.005 # 1e-3   # for soft update of target parameters\n",
    "gamma = 0.99\n",
    "LEARNING_RATE = 0.001\n",
    "TARGET_UPDATE = 10\n",
    "\n",
    "num_episodes = 20000\n",
    "print_every = 10\n",
    "hidden_dim = 16 ## 64 ## 16\n",
    "min_eps = 0.01\n",
    "max_eps_episode = 50\n",
    "\n",
    "env = gym.make('CartPole-v0')\n",
    "env = gym.wrappers.Monitor(env, directory=\"monitors\", force=True)\n",
    "        \n",
    "space_dim =  env.observation_space.shape[0] # n_spaces\n",
    "action_dim = env.action_space.n # n_actions  \n",
    "print('input_dim: ', space_dim, ', output_dim: ', action_dim, ', hidden_dim: ', hidden_dim)\n",
    "\n",
    "threshold = env.spec.reward_threshold\n",
    "print('threshold: ', threshold)\n",
    "\n",
    "agent = Agent(space_dim, action_dim, hidden_dim)\n",
    "\n",
    "    \n",
    "def epsilon_annealing(i_epsiode, max_episode, min_eps: float):\n",
    "    ##  if i_epsiode --> max_episode, ret_eps --> min_eps\n",
    "    ##  if i_epsiode --> 1, ret_eps --> 1  \n",
    "    slope = (min_eps - 1.0) / max_episode\n",
    "    ret_eps = max(slope * i_epsiode + 1.0, min_eps)\n",
    "    return ret_eps        \n",
    "\n",
    "def save(directory, filename):\n",
    "    torch.save(agent.q_local.state_dict(), '%s/%s_local.pth' % (directory, filename))\n",
    "    torch.save(agent.q_target.state_dict(), '%s/%s_target.pth' % (directory, filename))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def run_episode(env, agent, eps):\n",
    "    \"\"\"Play an epsiode and train\n",
    "\n",
    "    Args:\n",
    "        env (gym.Env): gym environment (CartPole-v0)\n",
    "        agent (Agent): agent will train and get action        \n",
    "        eps (float): eps-greedy for exploration\n",
    "\n",
    "    Returns:\n",
    "        int: reward earned in this episode\n",
    "    \"\"\"\n",
    "    state = env.reset()\n",
    "    done = False\n",
    "    total_reward = 0\n",
    "    \n",
    "\n",
    "    while not done:\n",
    "\n",
    "        action = agent.get_action(FloatTensor([state]) , eps)\n",
    "        \n",
    "        next_state, reward, done, _ = env.step(action.item())\n",
    "\n",
    "        total_reward += reward\n",
    "\n",
    "        if done:\n",
    "            reward = -1\n",
    "                    \n",
    "        # Store the transition in memory\n",
    "        agent.replay_memory.push(\n",
    "                (FloatTensor([state]), \n",
    "                 action, # action is already a tensor\n",
    "                 FloatTensor([reward]), \n",
    "                 FloatTensor([next_state]), \n",
    "                 FloatTensor([done])))\n",
    "                 \n",
    "\n",
    "        if len(agent.replay_memory) > BATCH_SIZE:\n",
    "\n",
    "            batch = agent.replay_memory.sample(BATCH_SIZE)\n",
    "            \n",
    "            agent.learn(batch, gamma)\n",
    "\n",
    "        state = next_state\n",
    "\n",
    "\n",
    "    return total_reward\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Episode:    10 Score:  14.0  Avg.Score: 16.91, eps-greedy:  0.80 Time: 00:00:04\n",
      "Episode:    20 Score:  10.0  Avg.Score: 16.43, eps-greedy:  0.60 Time: 00:00:05\n",
      "Episode:    30 Score:  12.0  Avg.Score: 15.35, eps-greedy:  0.41 Time: 00:00:06\n",
      "Episode:    40 Score:  24.0  Avg.Score: 15.46, eps-greedy:  0.21 Time: 00:00:06\n",
      "Episode:    50 Score:  44.0  Avg.Score: 19.18, eps-greedy:  0.01 Time: 00:00:07\n",
      "Episode:    60 Score:  40.0  Avg.Score: 25.64, eps-greedy:  0.01 Time: 00:00:09\n",
      "Episode:    70 Score:  71.0  Avg.Score: 32.42, eps-greedy:  0.01 Time: 00:00:12\n",
      "Episode:    80 Score: 144.0  Avg.Score: 39.64, eps-greedy:  0.01 Time: 00:00:15\n",
      "Episode:    90 Score: 125.0  Avg.Score: 51.00, eps-greedy:  0.01 Time: 00:00:20\n",
      "Episode:   100 Score: 200.0  Avg.Score: 62.72, eps-greedy:  0.01 Time: 00:00:25\n",
      "Episode:   110 Score: 125.0  Avg.Score: 77.11, eps-greedy:  0.01 Time: 00:00:30\n",
      "Episode:   120 Score: 200.0  Avg.Score: 94.33, eps-greedy:  0.01 Time: 00:00:36\n",
      "Episode:   130 Score: 142.0  Avg.Score: 111.83, eps-greedy:  0.01 Time: 00:00:44\n",
      "Episode:   140 Score: 200.0  Avg.Score: 129.67, eps-greedy:  0.01 Time: 00:00:51\n",
      "Episode:   150 Score: 200.0  Avg.Score: 145.85, eps-greedy:  0.01 Time: 00:00:57\n",
      "Episode:   160 Score: 188.0  Avg.Score: 159.67, eps-greedy:  0.01 Time: 00:01:03\n",
      "Episode:   170 Score: 200.0  Avg.Score: 172.13, eps-greedy:  0.01 Time: 00:01:09\n",
      "Episode:   180 Score:  98.0  Avg.Score: 174.34, eps-greedy:  0.01 Time: 00:01:13\n",
      "Episode:   190 Score: 200.0  Avg.Score: 179.90, eps-greedy:  0.01 Time: 00:01:19\n",
      "Episode:   200 Score: 191.0  Avg.Score: 182.97, eps-greedy:  0.01 Time: 00:01:26\n",
      "Episode:   210 Score: 154.0  Avg.Score: 183.03, eps-greedy:  0.01 Time: 00:01:32\n",
      "Episode:   220 Score: 146.0  Avg.Score: 180.57, eps-greedy:  0.01 Time: 00:01:40\n",
      "Episode:   230 Score: 142.0  Avg.Score: 176.98, eps-greedy:  0.01 Time: 00:01:45\n",
      "Episode:   240 Score: 140.0  Avg.Score: 173.75, eps-greedy:  0.01 Time: 00:01:50\n",
      "Episode:   250 Score: 200.0  Avg.Score: 172.25, eps-greedy:  0.01 Time: 00:01:56\n",
      "Episode:   260 Score: 136.0  Avg.Score: 166.93, eps-greedy:  0.01 Time: 00:02:01\n",
      "Episode:   270 Score: 139.0  Avg.Score: 161.86, eps-greedy:  0.01 Time: 00:02:06\n",
      "Episode:   280 Score: 143.0  Avg.Score: 164.11, eps-greedy:  0.01 Time: 00:02:10\n",
      "Episode:   290 Score: 130.0  Avg.Score: 157.96, eps-greedy:  0.01 Time: 00:02:14\n",
      "Episode:   300 Score: 200.0  Avg.Score: 156.81, eps-greedy:  0.01 Time: 00:02:20\n",
      "Episode:   310 Score: 177.0  Avg.Score: 159.21, eps-greedy:  0.01 Time: 00:02:26\n",
      "Episode:   320 Score: 122.0  Avg.Score: 157.57, eps-greedy:  0.01 Time: 00:02:31\n",
      "Episode:   330 Score: 121.0  Avg.Score: 157.72, eps-greedy:  0.01 Time: 00:02:36\n",
      "Episode:   340 Score: 149.0  Avg.Score: 156.21, eps-greedy:  0.01 Time: 00:02:40\n",
      "Episode:   350 Score: 167.0  Avg.Score: 154.10, eps-greedy:  0.01 Time: 00:02:48\n",
      "Episode:   360 Score: 200.0  Avg.Score: 156.24, eps-greedy:  0.01 Time: 00:02:53\n",
      "Episode:   370 Score: 164.0  Avg.Score: 157.51, eps-greedy:  0.01 Time: 00:02:58\n",
      "Episode:   380 Score:  77.0  Avg.Score: 156.29, eps-greedy:  0.01 Time: 00:03:02\n",
      "Episode:   390 Score: 129.0  Avg.Score: 156.52, eps-greedy:  0.01 Time: 00:03:07\n",
      "Episode:   400 Score: 200.0  Avg.Score: 155.25, eps-greedy:  0.01 Time: 00:03:13\n",
      "Episode:   410 Score: 167.0  Avg.Score: 154.42, eps-greedy:  0.01 Time: 00:03:18\n",
      "Episode:   420 Score:  45.0  Avg.Score: 153.86, eps-greedy:  0.01 Time: 00:03:23\n",
      "Episode:   430 Score: 197.0  Avg.Score: 155.88, eps-greedy:  0.01 Time: 00:03:28\n",
      "Episode:   440 Score: 180.0  Avg.Score: 159.25, eps-greedy:  0.01 Time: 00:03:34\n",
      "Episode:   450 Score: 123.0  Avg.Score: 157.70, eps-greedy:  0.01 Time: 00:03:39\n",
      "Episode:   460 Score: 156.0  Avg.Score: 156.59, eps-greedy:  0.01 Time: 00:03:44\n",
      "Episode:   470 Score: 140.0  Avg.Score: 156.64, eps-greedy:  0.01 Time: 00:03:49\n",
      "Episode:   480 Score: 168.0  Avg.Score: 160.56, eps-greedy:  0.01 Time: 00:03:55\n",
      "Episode:   490 Score: 147.0  Avg.Score: 163.10, eps-greedy:  0.01 Time: 00:04:00\n",
      "Episode:   500 Score: 126.0  Avg.Score: 159.95, eps-greedy:  0.01 Time: 00:04:04\n",
      "Episode:   510 Score: 152.0  Avg.Score: 155.87, eps-greedy:  0.01 Time: 00:04:09\n",
      "Episode:   520 Score: 131.0  Avg.Score: 154.34, eps-greedy:  0.01 Time: 00:04:15\n",
      "Episode:   530 Score: 131.0  Avg.Score: 150.45, eps-greedy:  0.01 Time: 00:04:19\n",
      "Episode:   540 Score: 104.0  Avg.Score: 145.02, eps-greedy:  0.01 Time: 00:04:23\n",
      "Episode:   550 Score: 123.0  Avg.Score: 141.23, eps-greedy:  0.01 Time: 00:04:27\n",
      "Episode:   560 Score: 128.0  Avg.Score: 138.14, eps-greedy:  0.01 Time: 00:04:31\n",
      "Episode:   570 Score: 116.0  Avg.Score: 134.46, eps-greedy:  0.01 Time: 00:04:35\n",
      "Episode:   580 Score: 132.0  Avg.Score: 131.09, eps-greedy:  0.01 Time: 00:04:40\n",
      "Episode:   590 Score: 143.0  Avg.Score: 127.91, eps-greedy:  0.01 Time: 00:04:45\n",
      "Episode:   600 Score: 136.0  Avg.Score: 125.87, eps-greedy:  0.01 Time: 00:04:49\n",
      "Episode:   610 Score: 126.0  Avg.Score: 126.03, eps-greedy:  0.01 Time: 00:04:57\n",
      "Episode:   620 Score: 122.0  Avg.Score: 128.32, eps-greedy:  0.01 Time: 00:05:02\n",
      "Episode:   630 Score: 187.0  Avg.Score: 130.75, eps-greedy:  0.01 Time: 00:05:08\n",
      "Episode:   640 Score:  19.0  Avg.Score: 124.93, eps-greedy:  0.01 Time: 00:05:10\n",
      "Episode:   650 Score: 127.0  Avg.Score: 119.69, eps-greedy:  0.01 Time: 00:05:12\n",
      "Episode:   660 Score: 200.0  Avg.Score: 119.57, eps-greedy:  0.01 Time: 00:05:17\n",
      "Episode:   670 Score: 137.0  Avg.Score: 124.75, eps-greedy:  0.01 Time: 00:05:23\n",
      "Episode:   680 Score: 143.0  Avg.Score: 127.12, eps-greedy:  0.01 Time: 00:05:28\n",
      "Episode:   690 Score: 191.0  Avg.Score: 132.08, eps-greedy:  0.01 Time: 00:05:34\n",
      "Episode:   700 Score: 153.0  Avg.Score: 138.30, eps-greedy:  0.01 Time: 00:05:40\n",
      "Episode:   710 Score: 200.0  Avg.Score: 144.11, eps-greedy:  0.01 Time: 00:05:46\n",
      "Episode:   720 Score: 200.0  Avg.Score: 149.20, eps-greedy:  0.01 Time: 00:05:53\n",
      "Episode:   730 Score: 200.0  Avg.Score: 152.65, eps-greedy:  0.01 Time: 00:06:01\n",
      "Episode:   740 Score: 200.0  Avg.Score: 165.85, eps-greedy:  0.01 Time: 00:06:07\n",
      "Episode:   750 Score: 162.0  Avg.Score: 175.66, eps-greedy:  0.01 Time: 00:06:12\n",
      "Episode:   760 Score: 170.0  Avg.Score: 178.25, eps-greedy:  0.01 Time: 00:06:17\n",
      "Episode:   770 Score: 127.0  Avg.Score: 173.10, eps-greedy:  0.01 Time: 00:06:21\n",
      "Episode:   780 Score: 118.0  Avg.Score: 169.05, eps-greedy:  0.01 Time: 00:06:25\n",
      "Episode:   790 Score: 150.0  Avg.Score: 164.97, eps-greedy:  0.01 Time: 00:06:29\n",
      "Episode:   800 Score: 145.0  Avg.Score: 162.35, eps-greedy:  0.01 Time: 00:06:34\n",
      "Episode:   810 Score: 150.0  Avg.Score: 157.50, eps-greedy:  0.01 Time: 00:06:39\n",
      "Episode:   820 Score: 200.0  Avg.Score: 155.26, eps-greedy:  0.01 Time: 00:06:45\n",
      "Episode:   830 Score: 176.0  Avg.Score: 152.84, eps-greedy:  0.01 Time: 00:06:50\n",
      "Episode:   840 Score: 197.0  Avg.Score: 148.73, eps-greedy:  0.01 Time: 00:06:55\n",
      "Episode:   850 Score: 177.0  Avg.Score: 149.98, eps-greedy:  0.01 Time: 00:07:00\n",
      "Episode:   860 Score: 200.0  Avg.Score: 153.33, eps-greedy:  0.01 Time: 00:07:06\n",
      "Episode:   870 Score: 178.0  Avg.Score: 159.55, eps-greedy:  0.01 Time: 00:07:13\n",
      "Episode:   880 Score: 167.0  Avg.Score: 167.66, eps-greedy:  0.01 Time: 00:07:19\n",
      "Episode:   890 Score: 200.0  Avg.Score: 173.22, eps-greedy:  0.01 Time: 00:07:27\n",
      "Episode:   900 Score: 179.0  Avg.Score: 177.40, eps-greedy:  0.01 Time: 00:07:34\n",
      "Episode:   910 Score: 200.0  Avg.Score: 182.68, eps-greedy:  0.01 Time: 00:07:41\n",
      "Episode:   920 Score: 200.0  Avg.Score: 184.58, eps-greedy:  0.01 Time: 00:07:47\n",
      "Episode:   930 Score: 200.0  Avg.Score: 185.05, eps-greedy:  0.01 Time: 00:07:53\n",
      "Episode:   940 Score: 200.0  Avg.Score: 189.16, eps-greedy:  0.01 Time: 00:08:00\n",
      "Episode:   950 Score: 200.0  Avg.Score: 192.67, eps-greedy:  0.01 Time: 00:08:06\n",
      "Episode:   960 Score: 200.0  Avg.Score: 194.55, eps-greedy:  0.01 Time: 00:08:13\n",
      "\n",
      " Environment solved in 961 episodes!\tAverage Score: 195.03\n"
     ]
    }
   ],
   "source": [
    "def train():    \n",
    "\n",
    "    scores_deque = deque(maxlen=100)\n",
    "    scores_array = []\n",
    "    avg_scores_array = []    \n",
    "    \n",
    "    time_start = time.time()\n",
    "\n",
    "    for i_episode in range(num_episodes):\n",
    "        eps = epsilon_annealing(i_episode, max_eps_episode, min_eps)\n",
    "        score = run_episode(env, agent, eps)\n",
    "\n",
    "        scores_deque.append(score)\n",
    "        scores_array.append(score)\n",
    "        \n",
    "        avg_score = np.mean(scores_deque)\n",
    "        avg_scores_array.append(avg_score)\n",
    "\n",
    "        dt = (int)(time.time() - time_start)\n",
    "            \n",
    "        if i_episode % print_every == 0 and i_episode > 0:\n",
    "            print('Episode: {:5} Score: {:5}  Avg.Score: {:.2f}, eps-greedy: {:5.2f} Time: {:02}:{:02}:{:02}'.\\\n",
    "                    format(i_episode, score, avg_score, eps, dt//3600, dt%3600//60, dt%60))\n",
    "            \n",
    "        if len(scores_deque) == scores_deque.maxlen:\n",
    "            ### 195.0: for cartpole-v0 and 475 for v1\n",
    "            if np.mean(scores_deque) >= threshold: \n",
    "                print('\\n Environment solved in {:d} episodes!\\tAverage Score: {:.2f}'. \\\n",
    "                    format(i_episode, np.mean(scores_deque)))\n",
    "                break\n",
    "\n",
    "                        \n",
    "        if i_episode % TARGET_UPDATE == 0:\n",
    "            agent.q_target.load_state_dict(agent.q_local.state_dict()) \n",
    "    \n",
    "    return scores_array, avg_scores_array\n",
    "\n",
    "scores, avg_scores = train()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "length of scores:  962 , len of avg_scores:  962\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "    \n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "print('length of scores: ', len(scores), ', len of avg_scores: ', len(avg_scores))\n",
    "\n",
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(111)\n",
    "plt.plot(np.arange(1, len(scores)+1), scores, label=\"Score\")\n",
    "plt.plot(np.arange(1, len(avg_scores)+1), avg_scores, label=\"Avg on 100 episodes\")\n",
    "plt.legend(bbox_to_anchor=(1.05, 1)) \n",
    "plt.ylabel('Score')\n",
    "plt.xlabel('Episodes #')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "save('dir_chk_V0', 'cartpole-v0')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ml2-kernel",
   "language": "python",
   "name": "ml2-kernel"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
